#include <iostream>
#include <future>
#include <thread>
#include <memory>


int Add(int n1,int n2)
{
    std::cout<<"Add"<<std::endl;
    return n1+n2;
}


int main()
{
    //packaged_task  任务包  对任务进行封装 模板类  


    //1.封装任务
    auto task = std::make_shared<std::packaged_task<int(int,int)>> (Add);

    //2.获取任务包关联的future
    std::future<int> res =task->get_future();


    //3.创建线程执行任务
    std::thread thr([task](){
        (*task)(11,22);
    });

    //4.获取结果
    std::cout<<res.get()<<std::endl;

    thr.join();

    return 0;
}



// int main()
// {
//     //packaged_task  任务包  对任务进行封装  

//     //1.封装任务
//     std::packaged_task<int(int,int)> task(Add);



//     //2.获取任务包关联的future
//     std::future<int> res =task.get_future();

//     //3.主线程执行任务 x
//     task(11,22);


//     //4.获取结果
//     std::cout<<res.get()<<std::endl;

//     return 0;
// }
